package View;

import DAO.FornecedorDAO;
import DAO.ItemDAO;
import Pojo.Fornecedor;
import Pojo.Item;
import java.util.ArrayList;
import java.util.Scanner;

/**Classe encarregada de auxiliar no controle das compras
 *
 * @author Higor
 */

public class MenuCompra {
    
    /**Método que imprime o menu de compras
     * 
     */
    public void menuAddItem(){ 
        System.out.println("---------itens----------");
        System.out.println("(1)adicionar um item a compra");
        System.out.println("(2)listar itens cadastrados");
        System.out.println("(3)encerrar a compra");
        System.out.println("Escolha uma opção");
        
    }
    
    /**Metodo que faz uso dos métodos dessa classe para o controle das compras
     * 
     * @param itemDao ItemDAO - Contem todos metodos para auxiliar a busca de um Item
     * @param fornecedorDao - Contem todos metodos para auxiliar a busca do Fornecedor
     */
    public void menu(ItemDAO itemDao, FornecedorDAO fornecedorDao){
        
        Scanner scanner = new Scanner(System.in);
        MenuItem menuItem = new MenuItem();
        MenuFornecedor menuFornecedor = new MenuFornecedor();
        Fornecedor fornecedorAux;
        String aux;
        Item itemAux;
        MenuCompra compra = new MenuCompra();
        ArrayList<Item> lista = new ArrayList<Item>();
        
        System.out.println("Entre com o nome do Fornecedor da compra: ");
        fornecedorAux = fornecedorDao.buscaFornecedorNome(scanner.nextLine());
        if(fornecedorAux == null){
            System.out.println("fornecedor nao encontrado!!\nDeseja fazer o cadastro?sim ou nao");
            aux = scanner.nextLine();
            if(aux.equals("sim")){
                fornecedorAux = menuFornecedor.cadastroFornecedor(fornecedorDao);
                System.out.println("---fim do cadastro--\n\n");
            }else{
                return;
            }            
        }
            byte opcao;
            
            do{
                compra.menuAddItem();
                opcao = Byte.parseByte(scanner.nextLine());
                switch(opcao){
                    case 1:
                        
                        float precoCustoNovo, precoCusto, precoCustoAntigo;
                        
                        System.out.println("Entre com o nome do item da compra");
                        itemAux = itemDao.buscaItemNome(scanner.nextLine());
                        if(itemAux == null){//verificação de existencia do item.
                           System.out.println("Item nao encontrado!!\nDeseja fazer o cadastro?sim ou nao");
                            aux = scanner.nextLine();
                           if(aux.equals("sim")){
                               itemAux = menuItem.cadastrarItem(itemDao);
                               System.out.println("---fim do cadastro--\n\n");
                           }else{
                               break;
                           } 
                        }
                        Item itemDalista = new Item();
                        itemDalista.setNome(itemAux.getNome());
                        
                        System.out.println("Entre com a quantidade");
                        int qtd = Integer.parseInt(scanner.nextLine());
                        int qtdAux = itemAux.getQuantidade();
                        itemAux.setQuantidade(qtd+qtdAux);
                        itemDalista.setQuantidade(qtd);
                        
                        System.out.println("Entre com o preço de custo");
                        precoCusto = Float.parseFloat(scanner.nextLine());
                        precoCustoAntigo = itemAux.getPrecoDeCusto();
                        //media ponderada entre o preço de custo novo e o antigo
                        precoCustoNovo = ( (precoCusto*qtd) +
                                (precoCustoAntigo*qtdAux) ) / (qtd+qtdAux); 
                        itemAux.setPrecoDeCusto(precoCustoNovo);
                        itemDalista.setPrecoDeCusto(precoCusto);
                        
                        itemAux.AddFonecedores(fornecedorAux); 
                        fornecedorAux.adicionarItem(itemAux);
                        
                        lista.add(itemDalista);
                        
                        break;
                    case 2:
                        
                        System.out.println("Itens na lista de compras:  \n");
                        
                        for(Item item: lista){
                            System.out.println("nome: "+item.getNome()+
                                    "\tQuantidade: "+item.getQuantidade()+
                                    "\tpreco de custo: "+item.getPrecoDeCusto());
                        }   
                        System.out.println();
                        break;
                    case 3:
                        itemDao.escreverArquivo();
                        fornecedorDao.escreverArquivo();
                        break;
                    default:
                        System.out.println("Opção invalida!!");
                }
            }while(opcao!=3);
                  
    }
}